#ifndef evaluator_h
#define evaluator_h

#include "worksheet.h"
#include "custom_string.h"
#include "eval_proc.h"
#include "mesinkata.h"

#define MaxArg 100


typedef struct {
	string arg[MaxArg];
	int nArg;
	} arguments;


string eval (string s, Sheet Sh);
/* mengembalikan hasil evaluasi dari string s*/

boolean isCell (string s);
/* mengecek apakah s menyatakan Lokasi dari suatu cell 
misal : A4, B5 */

boolean isArea (string s);
/* mengecek apakah string S menyatakan suaru area
misal : A4:B5 */

void ParseArea (string s, string *PosStart, string *PosEnd);
/* melakukan parsing untuk mendapatkan posisi awal dan akhir dari suatu area
prekondisi : string s adalah suatu area */

void printArg (arguments a);
/* megeluarkan isi tabel arguments di layar */

string MakeFormula ( string s );
/* membuat formula dari string S 
menghilangkan = di depan string S, membuang semua white space di dalam string */

boolean isSpecFormula (string s);
/* mengecek apakah string s memiliki operator prefix pada posisi1 stringnya
[or, and , not, mod, div , etc]*/

arguments ParsePrefix (string s); 
/* mengembalikan hasil parsing ke dalam tabel arguments
[hanya memparse operator prefix, operator infix diabaikan]
prekondisi : s pasti memiliki 1 operator prefix didepan*/

arguments ParseInfix (string F);
/* mengembalikan hasil parsing ke dalam tabel arguments
[hanya memparse operator infix, operator prefix diabaikan] */

string recursive_eval (string F, Sheet Sh);
/* melakukan proses evaluasi formula secara rekursif */

void replace3 (int x, string s, arguments *a);
/* mereplace 3 argumen pada indeks x-1,x, dan x+1 tabel argumen a dengan 1 argumen s pa*/

#endif
